我們已經認識了要爬取的網頁架構之後,就可以開始使用Excel的VBA來寫程式將資料抓取下來,今天的程式會引用IE物件,來取得HTML網頁元素。
Sub Yahoo股市()
‘清除工作表裡的所有資料
Cells.Clear
‘建立Internet Explorer (IE) 物件
Set ie = CreateObject("internetexplorer.application")
‘指定的網頁連結
ie.navigate "https://tw.stock.yahoo.com/class-quote?sectorId=3&exchange=TAI"
‘設定暫停(延遲)時間,等待網頁下載完成
Application.Wait (Now + TimeValue("0:00:03"))
‘設定工作表中的欄位名稱
Range("A1") = "股票名稱": Range("B1") = "代號": Range("C1") = "股價"
Range("D1") = "漲跌": Range("E1") = "漲跌幅(%)": Range("F1") = "開盤"
Range("G1") = "昨收": Range("H1") = "最高": Range("I1") = "最低"
Range("J1") = "成交量(張)": Range("K1") = "時間"
‘使用getElementsByTagName方法獲取<ul>元素
Set UL = ie.document.getElementsByTagName("ul")(21)
‘使用getElementsByTagName方法獲取<ul>元素中的所有<li>元素
Set LI = UL.getElementsByTagName("li")
‘使用回圈遍歷<li>,取得儲存格裡的每個內容<div>
For i = 0 To LI.Length - 1
Set DIV = LI(i).getElementsByTagName("div")
k = 1
‘從<div>中獲取數據,填入工作表
For j = 5 To DIV.Length - 1
If j <> 5 = True Then
Cells(i + 2, k) = DIV(j).innertext
k = k + 1
End If
Next
Next
‘自動調整欄位寬度
Columns.AutoFit
‘關閉IE物件
ie.Quit
Sub Yahoo股市()
可以在工作表中,新增按鈕控制項,記得指定巨集,之後只要點擊按鈕就能更新到最新資訊。
(資料擷取時間:2023/09/15)
參考資料
https://zanzan.tw/archives/4659
https://www.w3schools.com/jsref/met_document_getelementsbytagname.asp
https://www.youtube.com/watch?v=lLbXKqcmV60&t=443s
https://youtu.be/GZsCZ7JYJHE?si=K46KBAchsoAHSpBv
您好,
感謝您的程式,謝謝.
個人在引用時只會匯入欄位名稱,
各股的資料沒有匯入,
請問是那邊出錯了,
在YAHOO的網頁查詢程式時和您貼文上的不一樣,
不知是否是YAHOO的程式變更?
謝謝.